using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using NHibernate;
using NHibernate.Criterion;
using Didsoft.DataAccess.NHibernate;
using Didsoft.DataAccess.NHibernate.Extensions;
using Didsoft.DataAccess.Contracts;
using Boa.AIT.AccesoDatos.Entidades;
using Boa.AIT.AccesoDatos.Contratos;
using Boa.AIT.AccesoDatos.Entidades.DTO;

namespace Boa.AIT.AccesoDatos.Contexto
{
   public class AIT_MantenimientoPreventivoAccesoDatos : DataAccessBase<AIT_MantenimientoPreventivo>, IAIT_MantenimientoPreventivoAccesoDatos
   {
     public AIT_MantenimientoPreventivoAccesoDatos()
     {
     }
     
     /// <summary>
     /// Devuelve una lista IList<AIT_MantenimientoPreventivo> con todas las ocurrencias encontradas, en base a filtro.
     /// </summary>
     /// <param name="filtro"></param>
     /// <returns></returns>
     public IList<AIT_MantenimientoPreventivo> BuscarPorFiltro(string filtro)
     {
             ICriteria criteria = Session.CreateCriteria(typeof(AIT_MantenimientoPreventivo));
             criteria.Add(Expression.Like("Responsable", filtro+"%")); 
             return criteria.List<AIT_MantenimientoPreventivo>();
     }

     public IList<DtoMantenimientoPreventivoItem> GetItemsMantenimiento(int AsignaEmpleadoId)
     {

         string sql = @"select am.AccionesMantenimientoId, edi.EquipoDisponibleItem EquipoDisponibleItemId, ae.AsignaEmpleadoId, am.Accion, am.FrecuenciaDias, am.NotificarDiasAntes
                            from AIT_EquipoDisponibleItem edi
                            inner join AIT_EquipoDisponible ed on ed.EquipoDisponibleId = edi.EquipoDisponibleId
                            inner join AIT_AsignarEquipoAlmacen aea on aea.EquipoDisponibleId = ed.EquipoDisponibleId
                            inner join AIT_AsignaEmpleado ae on ae.AsignarEquipoAlmacenId = aea.AsignarEquipoAlmacenId
                            inner join AIT_EquipoIT e on e.EquipoId = edi.EquipoId
                            inner join AIT_ModeloEquipo me on me.ModeloEquipoId = e.ModeloEquipoId
                            inner join AIT_TipoEquipo te on te.TipoEquipoId = me.TipoEquipoId
                            inner join AIT_AccionesMantenimiento am on am.TipoEquipoId = te.TipoEquipoId
                            where ae.AsignaEmpleadoId = :AsignaEmpleadoId
                            ";
         var query = Session.CreateSQLQuery(sql);
         query.SetInt32("AsignaEmpleadoId", AsignaEmpleadoId);

         return query.ListBeanTransformer<DtoMantenimientoPreventivoItem>();
     
     }

     public IList<AIT_MantenimientoPreventivo> GetPorEquipoId(int equipoId)
     {
         string hql = @"from AIT_MantenimientoPreventivo mp 
                        where mp.EquipoDisponibleItem.Equipo.Id = :equipoId
                        order by mp.FechaProgramada asc";
         var query = Session.CreateQuery(hql);
         query.SetInt32("equipoId", equipoId);
         return query.List<AIT_MantenimientoPreventivo>();
     }


   }
}

